/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package wasolicitudesfiec.logicacontrol.SolicitarAperturaPostgrado;

import entidad.Persona;
import entidad.apertura.Solicitudaperturapostgrado;
import hero.interfaces.BnNodeValue;
import java.sql.Date;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.faces.context.FacesContext;
import wasolicitudesfiec.AperturaPostgrado.IngresarResolucion;
import wasolicitudesfiec.general.MensajeException;
import wasolicitudesfiec.logicacontrol.CTRL_Base;
import web.util.Constantes;

/**
 *
 * @author kabad
 */
public class CTRL_IngresarResolucion extends CTRL_Base {

    private IngresarResolucion gui;
    private final String nombreProceso = Constantes.Modelo.modelo_SolicitarAperturaPostgrado;
    private final String nombreActividad = Constantes.SolicitarAperturaPostgrado.ingresarResolucion;

    public CTRL_IngresarResolucion(IngresarResolucion gui, FacesContext facesContext) {
        super(facesContext);
        this.gui = gui;
        String instancia;
        instancia = (String) externalContext.getRequestParameterMap().get("instancia");
        if (instancia != null) {
            externalContext.getSessionMap().put("instancia", instancia);
        }
    }

    public String getNombreInstanciaProceso() {
        String instancia;
        instancia = (String) externalContext.getSessionMap().get("instancia");
        return instancia;
    }

    public void inicializar() throws MensajeException {
        String nombreInstancia;
        Solicitudaperturapostgrado solicitud;
        try {
            nombreInstancia = getNombreInstanciaProceso();
            this.inicializarInstancia(nombreInstancia);
            int idSolicitud = Integer.parseInt((String) prjSession.getProperty(Constantes.Atributo.idSolicitudProceso).getTheValue());
            gui.getMenu().setTitulo(this.nombreProceso + "_" + idSolicitud + ": " + nombreActividad);
            gui.setIdSolicitud(idSolicitud);

            solicitud = logica.getLogAperturaPostgrado().leerSolicitudAperturaNivel2(idSolicitud);
            gui.getLblSolicitante().setText(solicitud.getProfesor().getPersona().toString());
            gui.getTxtaTema().setValue(solicitud.getTema());
            gui.getLbltipo().setText(solicitud.getTipo());
            String recomendacion = "";
            if (solicitud.getEvaluador1() != null) {
                recomendacion =
                        "Tomando en consideración las recomendaciones de los evaluadores: " +
                        solicitud.getEvaluador1().getPersona().toString() + ". " + solicitud.getObservacionEvaluador1();
            }
            if (solicitud.getEvaluador2() != null) {
                recomendacion = "Tomando en consideración las recomendaciones de los evaluadores: " +
                        solicitud.getEvaluador2().getPersona().toString() + ". " + solicitud.getObservacionEvaluador2();
            }
            if (solicitud.getEvaluador3() != null) {
                recomendacion = "Tomando en consideración las recomendaciones de los evaluadores: " +
                        solicitud.getEvaluador3().getPersona().toString() + ". " + solicitud.getObservacionEvaluador3();
            }
            gui.getTxtaComentarioResolucion().setValue(recomendacion);
        } catch (MensajeException ex) {
            throw ex;
        } catch (Exception exception) {
            Logger.getLogger(CTRL_IngresarResolucion.class.getName()).log(Level.SEVERE, null, exception);
            throw new MensajeException(Constantes.Mensajes.noInicia);
        }
    }

    public void ingresarResolucion() throws MensajeException {
        String nombreInstancia;
        BnNodeValue actividad;
        Solicitudaperturapostgrado solicitud;
        try {
            nombreInstancia = getNombreInstanciaProceso();
            this.inicializarInstancia(nombreInstancia);
            actividad = usrSession.getNode(nombreInstancia, nombreActividad);
            if (!(actividad != null &&
                    (actividad.getState() == hero.interfaces.Constants.Nd.READY ||
                    actividad.getState() == hero.interfaces.Constants.Nd.ANTICIPABLE))) {
                throw new Exception();
            }
            int idSolicitud = Integer.parseInt((String) prjSession.getProperty(Constantes.Atributo.idSolicitudProceso).getTheValue());
            solicitud = logica.getLogAperturaPostgrado().leerSolicitudApertura(idSolicitud);
            solicitud.setResolucion((String) gui.getTxtnumResolucion().getText());
            solicitud.setResultadoResolucion((String) gui.getDdlResultadoResolucion().getSelected());
            solicitud.setComentarioResolucion((String) gui.getTxtaComentarioResolucion().getValue());
            Persona secretaria = logica.leerPersonaPorUsuario(usuario.getUsuario());
            solicitud.setFkIdSecretaria(secretaria.getIdPersona());
            solicitud.setEstado(Constantes.EstadoSolicitud.Terminada.toString());
            solicitud = logica.getLogAperturaPostgrado().guardarYClonarSolicitudApertura(solicitud);
            prjSession.setNodeProperty(nombreActividad, Constantes.Atributo.idSolicitudActividad, solicitud.getIdSolicitudApertura() + "");
            usrSession.startActivity(nombreInstancia, nombreActividad);
            usrSession.terminateActivity(nombreInstancia, nombreActividad);

            //enviar mail de notificacion
            int idSolicitudCompleta = solicitud.getFkParent();
            String subject = "";
            String message = "";
            String to = "";
            solicitud = logica.getLogAperturaPostgrado().leerSolicitudAperturaNivel2(idSolicitudCompleta);
            to = logica.leerPersona(solicitud.getFkIdProfesor()).getCorreo();
            subject = Constantes.MensajesCorreo.tituloCorreo + "Su Solicitud de Apertura de Postgrado ha sido aprobada";
            message = Constantes.TipoSolicitud.AperturaPostgrado + "_" + solicitud.getIdSolicitudApertura() + " " +
                    "\n\n" + "Título: " + solicitud.toString() + "\n" +
                    "Solicitante: " + logica.leerPersona(solicitud.getFkIdProfesor()).toString() + "\n\n" +
                    "Su Solicitud de Apertura de Postgrado ha sido aprobada por el Decano de la Facultad." + "\n\n" + "Puede revisar su solicitud dirigiéndose a la sección de solicitudes activas del sistema." + Constantes.MensajesCorreo.referenciaSistema;
        } catch (MensajeException ex) {
            throw ex;
        } catch (Exception ex) {
            Logger.getLogger(CTRL_IngresarResolucion.class.getName()).log(Level.SEVERE, null, ex);
            throw new MensajeException(Constantes.Mensajes.noGuarda);
        }
    }

    public void realizarActividad() throws MensajeException {
        Solicitudaperturapostgrado solicitud;
        try {
            int idSolicitud = Integer.parseInt((String) prjSession.getProperty(Constantes.Atributo.idSolicitudProceso).getTheValue());
            solicitud = logica.getLogAperturaPostgrado().leerSolicitudApertura(idSolicitud);
            solicitud.setResolucion((String) gui.getTxtnumResolucion().getText());
            solicitud.setResultadoResolucion((String) gui.getDdlResultadoResolucion().getSelected());
            solicitud.setComentarioResolucion((String) gui.getTxtaComentarioResolucion().getValue());
            Persona secretaria = logica.leerPersonaPorUsuario(usuario.getUsuario());
            solicitud.setFkIdSecretaria(secretaria.getIdPersona());
            solicitud = logica.getLogAperturaPostgrado().guardarYClonarSolicitudApertura(solicitud);
            } catch (MensajeException ex) {
            throw ex;
        } catch (Exception ex) {
            Logger.getLogger(CTRL_IngresarResolucion.class.getName()).log(Level.SEVERE, null, ex);
            throw new MensajeException(Constantes.Mensajes.noGuarda);
        }
    }
}
